import pandas as pd 
import numpy as np
import folium
import math
from scipy import stats
pd.options.mode.chained_assignment = None  # default='warn'
from plotnine import ggplot, aes, geom_line, geom_point, geom_bar, geom_boxplot
dataframe = pd.read_csv('/home/ruben/Fundamentos-de-Analisis-de-DAtos-I/Practica/Melbourne_housing_FULL.csv')
import scipy.stats as ss
import matplotlib.pyplot as plot
import seaborn as sb
from seaborn import kdeplot
def quartile_skew(x):
  q = x.quantile([.25, .50, .75]) 
  return ((q[0.75] - q[0.5]) - (q[0.5] - q[0.25])) / (q[0.75] - q[0.25])


def mostrar_analisis_var_cuantitativas(data):
    #calcular coeficiente de variacion
 datos_variable=pd.DataFrame([{"coeficiente de Variacion":(data.std()/data.mean())*100,\
                 "rango de la variable":data.max() - data.min(),
                 "rango intercuartilico":data.quantile(0.75) - data.quantile(0.25),
                 "coeficiente de asimetria":quartile_skew(data),
                 "Min":data.min(),
                 "Max":data.max(),
                 "Mean":data.mean()}])
 return(datos_variable)

def mostrar_graf_variables_continuas(df_data,column):
    sb.set_theme(style="whitegrid")
    fig, (ax1,ax2) = plot.subplots(1,2,figsize=(12,6))
    sb.histplot(data=df_data,x=column,ax=ax1)
    sb.boxplot(data=df_data,x=column,ax=ax2)
    sb.displot(data=df_data, x=column,kind="kde",rug=True)
    return plot.show()
def mostrar_graf_variables_discretas(df_data,column):
    sb.set_theme(style="whitegrid")
    fig, (ax1,ax2) = plot.subplots(1,2,figsize=(12,6))
    sb.boxplot(data=df_data,x=column,ax=ax1)
    sb.countplot(data=df_data,x=column,ax=ax2)
    plot.show()

En primer lugar vamos a realizar una inspeccion ocular del dataset:

dataframe2016=dataframe[dataframe["Date"].str[-4:] =='2016']
dataframe2016.describe()
print("precio medio 2016 ",dataframe2016["Price"].mean())
dataframe2017=dataframe[dataframe["Date"].str[-4:] =='2017']
print("precio medio 2017 ",dataframe2017["Price"].mean())
dataframe2017.describe()
dataframe2018=dataframe[dataframe["Date"].str[-4:] =='2018']
print("precio medio 2018 ",dataframe2018["Price"].mean())
dataframe2017.describe()
dataframe.head()
precio medio 2016  1063226.505338962
precio medio 2017  1051144.058702236
precio medio 2018  1017458.4129014697
Suburb Address Rooms Type Price Method SellerG Date Distance Postcode ... Bathroom Car Landsize BuildingArea YearBuilt CouncilArea Lattitude Longtitude Regionname Propertycount
0 Abbotsford 68 Studley St 2 h NaN SS Jellis 3/09/2016 2.5 3067.0 ... 1.0 1.0 126.0 NaN NaN Yarra City Council -37.8014 144.9958 Northern Metropolitan 4019.0
1 Abbotsford 85 Turner St 2 h 1480000.0 S Biggin 3/12/2016 2.5 3067.0 ... 1.0 1.0 202.0 NaN NaN Yarra City Council -37.7996 144.9984 Northern Metropolitan 4019.0
2 Abbotsford 25 Bloomburg St 2 h 1035000.0 S Biggin 4/02/2016 2.5 3067.0 ... 1.0 0.0 156.0 79.0 1900.0 Yarra City Council -37.8079 144.9934 Northern Metropolitan 4019.0
3 Abbotsford 18/659 Victoria St 3 u NaN VB Rounds 4/02/2016 2.5 3067.0 ... 2.0 1.0 0.0 NaN NaN Yarra City Council -37.8114 145.0116 Northern Metropolitan 4019.0
4 Abbotsford 5 Charles St 3 h 1465000.0 SP Biggin 4/03/2017 2.5 3067.0 ... 2.0 0.0 134.0 150.0 1900.0 Yarra City Council -37.8093 144.9944 Northern Metropolitan 4019.0

5 rows × 21 columns

Vemos que tenemos en total 21 variables algunas con aspecto de ser cualitativas y otras cuantitativas. En los proximos puntos iremos analizando las caracteristitcas de las mismas. Vemos ne primer lugar el tipo de las variables:

dataframe.dtypes
len(dataframe["Suburb"].unique())
351
aux=pd.DataFrame({"Suburb":pd.value_counts(dataframe['Suburb']),"Method":pd.value_counts(dataframe['Method']),\
                  "Regionname":pd.value_counts(dataframe['Regionname']),"SellerG":pd.value_counts(dataframe['SellerG']),\
                 "Method":pd.value_counts(dataframe['Method']),"CouncilArea":pd.value_counts(dataframe['CouncilArea'])})
aux
Suburb Method Regionname SellerG CouncilArea
@Realty NaN NaN NaN 12.0 NaN
A NaN NaN NaN 1.0 NaN
AIME NaN NaN NaN 1.0 NaN
ASL NaN NaN NaN 5.0 NaN
Abbotsford 137.0 NaN NaN NaN NaN
... ... ... ... ... ...
iProperty NaN NaN NaN 1.0 NaN
iSell NaN NaN NaN 32.0 NaN
iTRAK NaN NaN NaN 33.0 NaN
viewbank 1.0 NaN NaN NaN NaN
voglwalpole NaN NaN NaN 2.0 NaN

785 rows × 5 columns

print(dataframe.describe())
aux=pd.DataFrame({"Suburb":dataframe["Suburb"].describe(),"CouncilArea":dataframe["CouncilArea"].describe(),\
                  "Regionname":dataframe["Regionname"].describe(),"SellerG":dataframe["SellerG"].describe(),\
                 "Method":dataframe["Method"].describe()})
aux
              Rooms         Price      Distance      Postcode      Bedroom2  \
count  34857.000000  2.724700e+04  34856.000000  34856.000000  26640.000000   
mean       3.031012  1.050173e+06     11.184929   3116.062859      3.084647   
std        0.969933  6.414671e+05      6.788892    109.023903      0.980690   
min        1.000000  8.500000e+04      0.000000   3000.000000      0.000000   
25%        2.000000  6.350000e+05      6.400000   3051.000000      2.000000   
50%        3.000000  8.700000e+05     10.300000   3103.000000      3.000000   
75%        4.000000  1.295000e+06     14.000000   3156.000000      4.000000   
max       16.000000  1.120000e+07     48.100000   3978.000000     30.000000   

           Bathroom           Car       Landsize  BuildingArea     YearBuilt  \
count  26631.000000  26129.000000   23047.000000   13742.00000  15551.000000   
mean       1.624798      1.728845     593.598993     160.25640   1965.289885   
std        0.724212      1.010771    3398.841946     401.26706     37.328178   
min        0.000000      0.000000       0.000000       0.00000   1196.000000   
25%        1.000000      1.000000     224.000000     102.00000   1940.000000   
50%        2.000000      2.000000     521.000000     136.00000   1970.000000   
75%        2.000000      2.000000     670.000000     188.00000   2000.000000   
max       12.000000     26.000000  433014.000000   44515.00000   2106.000000   

          Lattitude    Longtitude  Propertycount  
count  26881.000000  26881.000000   34854.000000  
mean     -37.810634    145.001851    7572.888306  
std        0.090279      0.120169    4428.090313  
min      -38.190430    144.423790      83.000000  
25%      -37.862950    144.933500    4385.000000  
50%      -37.807600    145.007800    6763.000000  
75%      -37.754100    145.071900   10412.000000  
max      -37.390200    145.526350   21650.000000  
Suburb CouncilArea Regionname SellerG Method
count 34857 34854 34854 34857 34857
unique 351 33 8 388 9
top Reservoir Boroondara City Council Southern Metropolitan Jellis S
freq 844 3675 11836 3359 19744

4. Análisis y Transformación de Variables Cualitativas

para cada una de las variables cualitativas del dataframe comprobaremos sus medidas de centralidad y veremos cuales de ellas tiene sentido analizar

dataframe.describe()
Rooms Price Distance Postcode Bedroom2 Bathroom Car Landsize BuildingArea YearBuilt Lattitude Longtitude Propertycount
count 34857.000000 2.724700e+04 34856.000000 34856.000000 26640.000000 26631.000000 26129.000000 23047.000000 13742.00000 15551.000000 26881.000000 26881.000000 34854.000000
mean 3.031012 1.050173e+06 11.184929 3116.062859 3.084647 1.624798 1.728845 593.598993 160.25640 1965.289885 -37.810634 145.001851 7572.888306
std 0.969933 6.414671e+05 6.788892 109.023903 0.980690 0.724212 1.010771 3398.841946 401.26706 37.328178 0.090279 0.120169 4428.090313
min 1.000000 8.500000e+04 0.000000 3000.000000 0.000000 0.000000 0.000000 0.000000 0.00000 1196.000000 -38.190430 144.423790 83.000000
25% 2.000000 6.350000e+05 6.400000 3051.000000 2.000000 1.000000 1.000000 224.000000 102.00000 1940.000000 -37.862950 144.933500 4385.000000
50% 3.000000 8.700000e+05 10.300000 3103.000000 3.000000 2.000000 2.000000 521.000000 136.00000 1970.000000 -37.807600 145.007800 6763.000000
75% 4.000000 1.295000e+06 14.000000 3156.000000 4.000000 2.000000 2.000000 670.000000 188.00000 2000.000000 -37.754100 145.071900 10412.000000
max 16.000000 1.120000e+07 48.100000 3978.000000 30.000000 12.000000 26.000000 433014.000000 44515.00000 2106.000000 -37.390200 145.526350 21650.000000

Tabla 3.3.1
Antes de empezar el analisis de las variables indicar que el coeficiente de asimetria empleado es el de SKEWNESS por tanto para analizar los resultados podemos usar la sigueiente funcion.

  • Si el coeficiente de asimetría es menor que -1 o mayor que 1, la distribución de la variable es extremadamente sesgada.

  • Si el coeficiente de asimetría se encuentra entre -1 y -0,5 o entre 0,5 y 1, la distribución de la variable es moderadamente sesgada.

  • Si el coeficiente de asimetría se encuentra entre -0,5 y 0,5, la distribución de la variable es aproximadamente sesgada.

4.3.1 Analisis de la variable Rooms

Esta variable contiene el número de habitaciones de cada propiedad que hay en la muesta. Como se puede ver en la tabla 3.3.1 la variable tiene valor en 34857 toma valores discretos en el rango 1 a 16 dormitorios, que es el máximo encontrado. La mitad de la muestra tiene tres habitaciones o menos y el 75% de pisos tienen entre 1 y 4 habitaciones. A continuacion vamos a ver las frecuencias de la variable

pd.value_counts(dataframe['Rooms'])/dataframe["Rooms"].count()
3     0.432739
2     0.239034
4     0.228247
5     0.049832
1     0.042431
6     0.005852
7     0.000918
8     0.000545
10    0.000172
9     0.000115
12    0.000086
16    0.000029
Name: Rooms, dtype: float64

Como se puede ver mas de un 40% de los pisos vendidos tienen 3 dormitorios que es mas del doble del porcentaje del numero de pisos que tiene 2 dormitorios (un 23%) o 4 dormitorios(un 22,8%).

Pasamos a hacer el cálculo de las medidas de dispersión y simetria calcularemos el coficiente de variación, rango, IQR y simtetria:

mostrar_analisis_var_cuantitativas(dataframe["Rooms"])
coeficiente de Variacion rango de la variable rango intercuartilico coeficiente de asimetria Min Max Mean
0 32.000296 15 2.0 0.0 1 16 3.031012

Como se puede var en la tabla anterio la variable tiene un coeficiente de variacion del 32% con un coeficiente de asimetria igual a 0 por que la variable es simetrica.

mostrar_graf_variables_discretas(dataframe,"Rooms")
dataframe["Rooms_TR"]=dataframe["Rooms"].apply(np.sqrt)
sb.scatterplot(data=dataframe, x="Rooms", y="Price")
#mostrar_graf_variables_continuas(dataframe_filtered,"Distance_SQR")
plot.show()
sb.regplot(x="Rooms", y="Price", data=dataframe);
plot.show()
_images/4-TransformacionVariablesCuantitativas_16_0.png _images/4-TransformacionVariablesCuantitativas_16_1.png _images/4-TransformacionVariablesCuantitativas_16_2.png

Como ya se habia comprobado numéricamente la variable es muy simetrica aunque se aprecia unos outliers, viviendas de mas de 7 dormitorios que posteriormente veremos que efecto tienen en los modelos.
A priori no parece necesario tratar de ningún modo esta variable por ser simétrica y los outliers no parecen ser error de muestra.

4.3.2 Analisis de la variable Bedroom2

Esta variable contiene el numero de dormitorios de cada propiedad. Como se puede ver en la tabla 3.3.1 la variable tiene valor en 26640 elementos de la muestra.Toma valores discretos en el rango 0 a 30 dormitorios, que es el máximo encontrado. La mitad de la muestra tiene tres dormitorios o menos y el 75% de pisos tienen entre 0 y 4 dormitorios. Estas cifras llaman la atencion ya que el máximo numero de habitaciones de la variable rooms tenia como maximo 16, por lo que esos datos puede que estén mal imputados.

pd.value_counts(dataframe['Bedroom2'])/dataframe["Bedroom2"].count()
3.0     0.445983
4.0     0.238288
2.0     0.216854
5.0     0.053566
1.0     0.036261
6.0     0.006306
7.0     0.001126
0.0     0.000638
8.0     0.000488
9.0     0.000188
10.0    0.000150
30.0    0.000038
12.0    0.000038
20.0    0.000038
16.0    0.000038
Name: Bedroom2, dtype: float64

Los resultados son muy parecidos a los obtenidos con la variable Rooms por lo que no es probable que la variable rooms haga referencia tambien a numero de dormitorios y no solo de habitaciones. Como ya ocurria con la variable rooms casi el 89% de las propiedades tiene entre 2 y 4 dormitorios. Vamos a verificar las medidas de dispersión y asimetria de la variable

mostrar_analisis_var_cuantitativas(dataframe["Bedroom2"])
coeficiente de Variacion rango de la variable rango intercuartilico coeficiente de asimetria Min Max Mean
0 31.792606 30.0 2.0 0.0 0.0 30.0 3.084647

El coeficiente de variacion es muy similar a la variable rooms y con el mismo rango intercuantilico, aunque en este caso el coficiente de asimetria es 0 lo que parece indica que se trata de una distribucion simétrica de los datos. Lo verificaremos con los siguientes diagramas:

mostrar_graf_variables_discretas(dataframe,"Bedroom2")
_images/4-TransformacionVariablesCuantitativas_23_0.png

como ya se habia comprobado numéricamente la variable es muy simetrica aunque se aprecia unos outliers, viviendas de mas de 7 dormitorios que se deberian eliminar. También habra que seleccionar que variable es de mejor calidad para llevar a cabo el modelo.

En este caso la variable tiene un coeficiente de asimetria 0 y algún outlier que veremos posteriormente como afecta al modelo

4.3.3 Analisis de la variable Distance

La variable Distance indica la distancia al centro del inmbueble y toma como unidad las millas. Como se puede ver en la tabla 3.3.1 esta variable tiene valores en 34856 elementos de la muestra. La variable toma valores entre 0 y 48 millas , el 50% de los pisos de la muestra se encuentran a menos de 10,3 millas del centro de la ciudad y la desviacion tipica es 6,78. Calculamos medidas de dispersión y simetriía ya que las de centralidad las hemos visto en la tabla 3.3.1

mostrar_analisis_var_cuantitativas(dataframe["Distance"])
coeficiente de Variacion rango de la variable rango intercuartilico coeficiente de asimetria Min Max Mean
0 60.696784 48.1 7.6 -0.026316 0.0 48.1 11.184929

segun el coeficiente la varibale parece bastante simetrica, vemaos el boxplot para cerciorarnos. Vemos la distribucion de la variable y posibles outliers

mostrar_graf_variables_continuas(dataframe,"Distance")
_images/4-TransformacionVariablesCuantitativas_28_0.png _images/4-TransformacionVariablesCuantitativas_28_1.png

¿que se ve aqui?

como indica el coeficiente de asimetria , la variable es ligeramente asimetrica, vamos a intentar que se ajuste mejor a una distribucion normal

#dataframe=dataframe[dataframe["Distance"].notna()] 

dataframe["BathsAndRooms"]=(dataframe["Rooms"]+dataframe["Bathroom"])/dataframe["Distance"].apply(np.sqrt)

dataframe_filtered=dataframe[dataframe["Distance"] >0]

dataframe_filtered.reset_index(drop=True,inplace=True)
sb.scatterplot(data=dataframe, x="Distance", y="Price")
#mostrar_graf_variables_continuas(dataframe_filtered,"Distance_SQR")
plot.show()
#dataframe_filtered["Distance_TRA"]=stats.boxcox(dataframe_filtered["Distance"])[0]

dataframe["Distance_TRA"]=dataframe["Distance"].apply(np.sqrt)


#sb.displot(data=dataframe_filtered, x="Distance_TRA",y="Price")
#plot.show()
#dataframe["Distance_SQR"]=dataframe["Distance"].apply(np.sqrt)
#sb.scatterplot(data=dataframe, x="Distance", y="Price")
#plot.show()
mostrar_graf_variables_continuas(dataframe_filtered,"Distance")
sb.regplot(x="Distance_TRA", y="Price", data=dataframe);
plot.show()
sb.regplot(x="BathsAndRooms", y="Price", data=dataframe);
plot.show()


dataframe.corr()
_images/4-TransformacionVariablesCuantitativas_31_0.png _images/4-TransformacionVariablesCuantitativas_31_1.png _images/4-TransformacionVariablesCuantitativas_31_2.png _images/4-TransformacionVariablesCuantitativas_31_3.png
/home/ruben/anaconda3/lib/python3.7/site-packages/numpy/core/function_base.py:153: RuntimeWarning: invalid value encountered in multiply
/home/ruben/anaconda3/lib/python3.7/site-packages/numpy/linalg/linalg.py:1965: RuntimeWarning: invalid value encountered in greater
_images/4-TransformacionVariablesCuantitativas_31_5.png
Rooms Price Distance Postcode Bedroom2 Bathroom Car Landsize BuildingArea YearBuilt Lattitude Longtitude Propertycount Rooms_TR BathsAndRooms Distance_TRA
Rooms 1.000000 0.465238 0.271511 0.085890 0.946755 0.611826 0.393878 0.037402 0.156229 -0.012749 0.004872 0.103235 -0.071677 0.990772 0.492557 0.303786
Price 0.465238 1.000000 -0.211384 0.044950 0.430275 0.429878 0.201803 0.032748 0.100754 -0.333306 -0.215607 0.197874 -0.059017 0.460447 0.585621 -0.198883
Distance 0.271511 -0.211384 1.000000 0.481566 0.269524 0.126201 0.241835 0.060862 0.076301 0.323059 -0.100417 0.200946 -0.018140 0.286191 -0.498291 0.975137
Postcode 0.085890 0.044950 0.481566 1.000000 0.089292 0.120080 0.067886 0.040664 0.042437 0.089805 -0.231027 0.362895 0.017108 0.083589 -0.140948 0.409997
Bedroom2 0.946755 0.430275 0.269524 0.089292 1.000000 0.614892 0.388491 0.037019 0.154157 -0.002022 0.003447 0.106164 -0.053451 0.939649 0.465217 0.300193
Bathroom 0.611826 0.429878 0.126201 0.120080 0.614892 1.000000 0.307518 0.036333 0.147558 0.167955 -0.059183 0.106531 -0.032887 0.591324 0.573119 0.137240
Car 0.393878 0.201803 0.241835 0.067886 0.388491 0.307518 1.000000 0.037829 0.104373 0.128702 -0.009020 0.047213 -0.009617 0.396106 0.091560 0.270558
Landsize 0.037402 0.032748 0.060862 0.040664 0.037019 0.036333 0.037829 1.000000 0.354530 0.044474 0.025318 -0.002582 -0.018195 0.036586 0.015453 0.047017
BuildingArea 0.156229 0.100754 0.076301 0.042437 0.154157 0.147558 0.104373 0.354530 1.000000 0.067811 0.017155 -0.002143 -0.024523 0.152220 0.077408 0.069931
YearBuilt -0.012749 -0.333306 0.323059 0.089805 -0.002022 0.167955 0.128702 0.044474 0.067811 1.000000 0.091592 -0.022175 0.022420 -0.020429 -0.229233 0.340103
Lattitude 0.004872 -0.215607 -0.100417 -0.231027 0.003447 -0.059183 -0.009020 0.025318 0.017155 0.091592 1.000000 -0.345589 0.011112 0.010120 0.006591 -0.077277
Longtitude 0.103235 0.197874 0.200946 0.362895 0.106164 0.106531 0.047213 -0.002582 -0.002143 -0.022175 -0.345589 1.000000 0.016326 0.098764 -0.055585 0.203296
Propertycount -0.071677 -0.059017 -0.018140 0.017108 -0.053451 -0.032887 -0.009617 -0.018195 -0.024523 0.022420 0.011112 0.016326 1.000000 -0.076877 -0.017375 -0.044839
Rooms_TR 0.990772 0.460447 0.286191 0.083589 0.939649 0.591324 0.396106 0.036586 0.152220 -0.020429 0.010120 0.098764 -0.076877 1.000000 0.478817 0.320539
BathsAndRooms 0.492557 0.585621 -0.498291 -0.140948 0.465217 0.573119 0.091560 0.015453 0.077408 -0.229233 0.006591 -0.055585 -0.017375 0.478817 1.000000 -0.548055
Distance_TRA 0.303786 -0.198883 0.975137 0.409997 0.300193 0.137240 0.270558 0.047017 0.069931 0.340103 -0.077277 0.203296 -0.044839 0.320539 -0.548055 1.000000

¿que hacemos con esto?

¿que hacemos con esto

4.3.4 Analisis de la variable Bathrooms

Esta variable indica el número de baños del inmuble.Como se puede ver en la tabla 3.3.1 la variable tiene valor en 26631 elementos de la muestra. Toma valores discretos en el rango 0 a 12 dormitorios. El 75% de pisos tienen entre 0 y 2 baños . A continuacion vamos a ver las frecuencias de la variable:

pd.value_counts(dataframe['Bathroom'])/dataframe["Bathroom"].count()
1.0     0.486989
2.0     0.415456
3.0     0.081897
4.0     0.010101
5.0     0.002891
0.0     0.001727
6.0     0.000601
7.0     0.000150
8.0     0.000113
9.0     0.000038
12.0    0.000038
Name: Bathroom, dtype: float64

Como se puede ver en la tabla anterior el 89% de la muestra tiene igual o menos de dos dormitorios comn una media de 1,6 baños. En la tabla 3.3.1 respecto a las medidas de dispersión podemos ver que la desviacion típica es de 0,72 y en la siguiente tabla vemos mas variables de dispersión y asimetria:

mostrar_analisis_var_cuantitativas(dataframe["Bathroom"])
coeficiente de Variacion rango de la variable rango intercuartilico coeficiente de asimetria Min Max Mean
0 44.572429 12.0 1.0 -1.0 0.0 12.0 1.624798

El coeficiente de variación es del 44% y el coeficiente de asimetria es -1 lo que indica que la variable es moderadamente sesgada, tiene cola a la derecha. comprobaremos esto mismo de manera visual pintando su histograma y boxplot

mostrar_graf_variables_discretas(dataframe,"Bathroom")

sb.regplot(x="Bathroom", y="Price", data=dataframe);
plot.show()
_images/4-TransformacionVariablesCuantitativas_39_0.png _images/4-TransformacionVariablesCuantitativas_39_1.png
sb.scatterplot(data=dataframe, x="Bathroom", y="Price")
#mostrar_graf_variables_continuas(dataframe_filtered,"Distance_SQR")
plot.show()
_images/4-TransformacionVariablesCuantitativas_40_0.png
dataframe_filtered=dataframe[(dataframe["Bathroom"]>0) & (dataframe["Bathroom"] is not None)]
dataframe["Bathroom_TRA"]=dataframe["Bathroom"].apply(np.sqrt)
dataframe["Price_TRA"]=dataframe["Price"].apply(np.sqrt)
dataframe["Price_TRA"]=np.log2(dataframe["Price"])
#dataframe["Distance_SQR"]=dataframe["Distance"].apply(np.sqrt)
sb.scatterplot(data=dataframe, x="Bathroom_TRA", y="Price")
mostrar_graf_variables_continuas(dataframe,"Bathroom_TRA")
plot.show()

sb.displot(data=dataframe, x="Bathroom_TRA",y="Price_TRA",kind="kde")
plot.show()
#dataframe["Distance_SQR"]=dataframe["Distance"].apply(np.sqrt)
#sb.scatterplot(data=dataframe, x="Distance", y="Price")
#plot.show()
mostrar_graf_variables_continuas(dataframe,"Bathroom_TRA")
sb.regplot(x="Bathroom_TRA", y="Price_TRA", data=dataframe);
plot.show()
_images/4-TransformacionVariablesCuantitativas_41_0.png _images/4-TransformacionVariablesCuantitativas_41_1.png _images/4-TransformacionVariablesCuantitativas_41_2.png _images/4-TransformacionVariablesCuantitativas_41_3.png _images/4-TransformacionVariablesCuantitativas_41_4.png _images/4-TransformacionVariablesCuantitativas_41_5.png _images/4-TransformacionVariablesCuantitativas_41_6.png

NI idea de que hacer con esta variable si es que hay que hacer algo…

4.3.5 Analisis de la variable Car

Esta variable contiene el numero de plazas de aparcamiento que tiene asociadas la vivienda. Como se puede ver en la tabla 3.3.1 la variable tiene valor en 26129 de la muestra y toma valores discretos en el rango 0 a 26 plazas de aparcamiento. El 75% de pisos tienen entre 0 y 2 plazas de aparcamiento . A continuacion vamos a ver las frecuencias de la variable:

pd.value_counts(dataframe['Car'])/dataframe["Car"].count()
2.0     0.467450
1.0     0.350721
0.0     0.062421
3.0     0.061464
4.0     0.044433
5.0     0.005779
6.0     0.005358
7.0     0.000957
8.0     0.000880
10.0    0.000230
9.0     0.000115
11.0    0.000077
26.0    0.000038
12.0    0.000038
18.0    0.000038
Name: Car, dtype: float64

como se puede ver casi el 47% de las casas de la muestra tienen dos plaza de aparcamiento y el 81% entre 1 y 2 plazas de aparcamiento.Respecto a las medidas de dispersión, en la tabla 3.3.1 podemos ver que la desviacion típica es de 1.01. En la siguiente tabla vemos mas variables de dispersión y asimetria:

mostrar_analisis_var_cuantitativas(dataframe["Car"])
coeficiente de Variacion rango de la variable rango intercuartilico coeficiente de asimetria Min Max Mean
0 58.465078 26.0 1.0 -1.0 0.0 26.0 1.728845

como se puede ver hay un coeficiente de variación alto y asimetria por la izquierda que verificaremos mejor haciendo algunos diagramas

mostrar_graf_variables_discretas(dataframe,"Car")
_images/4-TransformacionVariablesCuantitativas_48_0.png
sb.scatterplot(data=dataframe, x="Car", y="Price")
mostrar_graf_variables_continuas(dataframe,"Car")
plot.show()
_images/4-TransformacionVariablesCuantitativas_49_0.png _images/4-TransformacionVariablesCuantitativas_49_1.png _images/4-TransformacionVariablesCuantitativas_49_2.png

4.3.6 Analisis de la variable Landsize

Esta variable contiene el tamaño del terreno asociado a la vivienda, excluye los metros de la vivienda y está calculada en metros cuadrados. La media de terreno asociado al inmbueble es de 593.598993 El 75% de pisos tienen menos de 670 metros cuadrados de parcela. A continuacion vamos a ver las frecuencias de la variable:

mostrar_analisis_var_cuantitativas(dataframe["Landsize"])
coeficiente de Variacion rango de la variable rango intercuartilico coeficiente de asimetria Min Max Mean
0 572.582161 433014.0 446.0 -0.331839 0.0 433014.0 593.598993

la variable es aproximadamente sesgada a la izquierda y con un rango de valores muy amplio.pintamos algunos gráficos para entender mejor la asimietria y la dispersión del a variablable

mostrar_graf_variables_continuas(dataframe,"Landsize")
_images/4-TransformacionVariablesCuantitativas_53_0.png _images/4-TransformacionVariablesCuantitativas_53_1.png

vamos a eliminar el registro superior que está desvirtuando el gráfico para poder analizarlo con mas detalle

#Eliminamos outliers superiores para poder seguir analizando 
df_filtered=dataframe[dataframe["Landsize"]<20000]
print("registros filtrado = ",(dataframe["Landsize"].count()-df_filtered["Landsize"].count()))
mostrar_graf_variables_continuas(df_filtered,"Landsize")



sb.scatterplot(data=df_filtered, x="Landsize", y="Price")
#mostrar_graf_variables_continuas(dataframe_filtered,"Distance_SQR")
plot.show()
registros filtrado =  23
_images/4-TransformacionVariablesCuantitativas_55_1.png _images/4-TransformacionVariablesCuantitativas_55_2.png _images/4-TransformacionVariablesCuantitativas_55_3.png

Continua habiendo outliers que hacen que la variabe sea muy dispersa por lo que la variable es clara condidata a ser transformada

#dataframe=dataframe[dataframe["Distance"].notna()] 

dataframe_filtered=dataframe[(dataframe["Landsize"]>0) ]

#dataframe_filtered.reset_index(drop=True,inplace=True)

#dataframe_filtered["Landsize_TRA"]=stats.boxcox(dataframe_filtered["Distance"])[0]

#dataframe_filtered["Landsize_TRA"]=dataframe_filtered["Landsize"].apply(np.sqrt)
dataframe_filtered["Landsize_TRA"]=np.log(dataframe_filtered["Landsize"])



sb.scatterplot(data=dataframe_filtered, x="Landsize_TRA", y="Price")
#mostrar_graf_variables_continuas(dataframe_filtered,"Distance_SQR")
plot.show()
#dataframe_filtered['Landsize_TRA'] = np.where(dataframe['Landsize'] >= 40000, 40000, (dataframe['Landsize']//100)*100)
#dataframe_filtered['Landsize_TRA'] = np.where(dataframe_filtered['Landsize_TRA'] <= 70, 70, dataframe_filtered['Landsize_TRA'])


sb.displot(data=dataframe_filtered, x="Landsize_TRA",y="Price")
plot.show()
#dataframe["Distance_SQR"]=dataframe["Distance"].apply(np.sqrt)
#sb.scatterplot(data=dataframe, x="Distance", y="Price")
#plot.show()
mostrar_graf_variables_continuas(dataframe_filtered,"Landsize_TRA")
_images/4-TransformacionVariablesCuantitativas_57_0.png _images/4-TransformacionVariablesCuantitativas_57_1.png _images/4-TransformacionVariablesCuantitativas_57_2.png _images/4-TransformacionVariablesCuantitativas_57_3.png

4.3.7 Analisis de la variable BulldingArea

Esta variable contiene el el tamaño del terreno asociado a la vivienda en metros cuadrados. Como se puede ver en la tabla 3.3.1 la variable tiene valor en 13742 elementos de la muestra.La media del tamaño de los inmubles de 160.25640 y toma valores continuos en el rango 0 a 44515 . El 75% de pisos tienen menos de 188.00000 metros cuadrado. A continuacion vamos a ver las medidas de dispersión de la varibale:

mostrar_analisis_var_cuantitativas(dataframe["BuildingArea"])
coeficiente de Variacion rango de la variable rango intercuartilico coeficiente de asimetria Min Max Mean
0 250.390661 44515.0 86.0 0.209302 0.0 44515.0 160.2564

como se puede ver la variable tiene asimetria a la derecha, pero en la tabla inicial vimos que la desviación estándar era muy alta para el valor que tomaba la media. Pasamos a comprobar visualmente la simetria

mostrar_graf_variables_continuas(dataframe,"BuildingArea")
_images/4-TransformacionVariablesCuantitativas_61_0.png _images/4-TransformacionVariablesCuantitativas_61_1.png

como se puede ver hay claramente algún outlier que desvirtua la muestra (ya lo pudimos ver tambien en la tabla 3.1.1 donde la media era de 522 y el maximo era mas de 44000 metros cuadrados de parcela). Eliinamos el el maximo en cuestión y repiintamos los graficos

#Eliminamos el maximo y vemos que ocurre
df_filtered=dataframe[dataframe["BuildingArea"]<1000]
print("registros filtrado = ",(dataframe["BuildingArea"].count()-df_filtered["BuildingArea"].count()))
mostrar_graf_variables_continuas(df_filtered,"BuildingArea")
#df_filtered["BuildingArea_TRA"]=np.log(dataframe_filtered["BuildingArea"])
df_filtered["BuildingArea_TRA"]=df_filtered["Distance"].apply(np.sqrt)
sb.scatterplot(data=df_filtered, x="BuildingArea_TRA", y="Price")
#mostrar_graf_variables_continuas(dataframe_filtered,"Distance_SQR")
plot.show()



df_filtered=dataframe[dataframe["YearBuilt"]>1800]

sb.scatterplot(data=df_filtered, x="YearBuilt", y="Price")
#mostrar_graf_variables_continuas(dataframe_filtered,"Distance_SQR")
plot.show()
registros filtrado =  13
_images/4-TransformacionVariablesCuantitativas_63_1.png _images/4-TransformacionVariablesCuantitativas_63_2.png _images/4-TransformacionVariablesCuantitativas_63_3.png _images/4-TransformacionVariablesCuantitativas_63_4.png

Los datos sin ese registro tienen mejor aspecto y parecen muy concentrados. Lo tendremos en cuenta cuando tratemos la variables.

4.3.8 Analisis de la variable PropertyCountss

Esta variable contiene el numero de viviendas existentes en el barrio. Como se puede ver en la tabla 3.3.1 la variable tiene valor en 34854 y toma valores discretos en el rango 83 a 21650(que es el maximo de viviendas en un bbarrio). El 75% de pisos están en barrios con 10412 viviendas o menos. A continuacion vamos a ver las frecuencias de la variable:

mostrar_analisis_var_cuantitativas(dataframe["Propertycount"])
coeficiente de Variacion rango de la variable rango intercuartilico coeficiente de asimetria Min Max Mean
0 58.472938 21567.0 6027.0 0.210884 83.0 21650.0 7572.888306

La variable es aproximadamente sesgada a la derecha , lo comprobaremos visalmente:

mostrar_graf_variables_continuas(dataframe,"Propertycount")
_images/4-TransformacionVariablesCuantitativas_68_0.png _images/4-TransformacionVariablesCuantitativas_68_1.png

4.3.1 Analisis de la variable Latitud

Esta variable contiene la coordenada geográfica correspondiente a la latitud del inmueble. Como se puede ver en la tabla de abajo

mostrar_analisis_var_cuantitativas(dataframe["Lattitude"])
coeficiente de Variacion rango de la variable rango intercuartilico coeficiente de asimetria Min Max Mean
0 -0.238766 0.80023 0.10885 -0.016996 -38.19043 -37.3902 -37.810634
mostrar_analisis_var_cuantitativas(dataframe["Longtitude"])
coeficiente de Variacion rango de la variable rango intercuartilico coeficiente de asimetria Min Max Mean
0 0.082874 1.10256 0.1384 -0.073699 144.42379 145.52635 145.001851
import geopy.distance 
import geopandas
import numpy as np
from shapely.geometry import Point
from geopy.distance import distance

mapa = folium.Map(location=[-37.810634, 145.001851], zoom_start=11)
data_filtered=dataframe[dataframe['Lattitude'].notnull() & \
                        dataframe['Longtitude'].notnull() &\
                       dataframe['Rooms'].notnull() & \
                       dataframe['Bathroom'].notnull() & \
                       dataframe['Price'].notnull()]
coords_2=(-37.810634,145.001851)



locations=data_filtered[['Lattitude', 'Longtitude']]
locations.round(6)
locationlist=locations.values.tolist()
len(locationlist)
for i,v in  data_filtered.iterrows():
    popup = popup = """
    Bathrooms: <b>%s</b><br>
    Rooms: <b>%s</b><br>
    Suburb : <b>%s</b><br>
    Price : <b>%s</b><br>
    """ % (v['Bathroom'], v['Rooms'], v['Suburb'], v['Price'])
    #print(v['Price'])
    if v['Price'] < float('500000.0'):
        #Color Azul
        folium.CircleMarker(location=[v['Lattitude'], v['Longtitude']], tooltip=popup,
                            color='#0000FF',
                            fill_color='#0000FF',
                            fill=True, radius=1 ).add_to(mapa)
    elif  (v['Price'] >= float('500000.0')) & (v['Price'] < float('800000.0')):
        #color Verde
        folium.CircleMarker(location=[v['Lattitude'], v['Longtitude']], tooltip=popup,
                            color='#00FF40',
                            fill_color='#00FF40',
                            fill=True, radius=1 ).add_to(mapa)
    elif  (v['Price'] >= float('800000.0')) & (v['Price'] < float('1200000.0')):
        #Color Amarillo
        folium.CircleMarker(location=[v['Lattitude'], v['Longtitude']], tooltip=popup,
                            color='#FFFF00',
                            fill_color='#FFFF00',
                            fill=True, radius=1 ).add_to(mapa)
    elif  (v['Price'] >= float('1200000.0'))& (v['Price'] < float('1500000.0')):
        #Color cian
        folium.CircleMarker(location=[v['Lattitude'], v['Longtitude']], tooltip=popup,
                            color='#00fff7',
                            fill_color='#00fff7',
                            fill=True, radius=1 ).add_to(mapa)
    elif  (v['Price'] >= float('1500000.0'))& (v['Price'] < float('1800000.0')):
        #Color Rojo
        folium.CircleMarker(location=[v['Lattitude'], v['Longtitude']], tooltip=popup,
                            color='#ff2300',
                            fill_color='#ff2300',
                            fill=True, radius=1 ).add_to(mapa)
    elif  (v['Price'] >= float('1800000.0'))& (v['Price'] < float('2100000.0')):
        #Color Naranja
        folium.CircleMarker(location=[v['Lattitude'], v['Longtitude']], tooltip=popup,
                            color='#ffc900',
                            fill_color='#ffc900',
                            fill=True, radius=1 ).add_to(mapa)
    elif  (v['Price'] >= float('2100000.0')):
        #Color Morado
        folium.CircleMarker(location=[v['Lattitude'], v['Longtitude']], tooltip=popup,
                            color='#f700ff',
                            fill_color='#f700ff',
                            fill=True, radius=1 ).add_to(mapa)
folium.Marker(location=('37.84280999999999','145.03483'), tooltip=popup,
                            color='#f711ff',
                            fill_color='#ffffff',
                            fill=True, radius=20 ).add_to(mapa)
mapa
    
    
Make this Notebook Trusted to load map: File -> Trust Notebook
arr=[]
for lat, lon in zip(data_filtered['Lattitude'], data_filtered['Longtitude']):
    arr.append(distance((lat,lon), coords_2).km)

data_filtered["Distancia_NEW"]=arr



dataframe.describe()
#df_fil=dataframe[(dataframe["Lattitude"] is not None) & (dataframe["Longtitude"] is not None)]
dataframe["Location_TRA"]=dataframe.Longtitude/dataframe.Lattitude
dataframe_less=dataframe[(dataframe["Lattitude"]>=dataframe["Lattitude"].mean()) ]
dataframe_over=dataframe[(dataframe["Lattitude"]<dataframe["Lattitude"].mean()) ]

sb.regplot(data=data_filtered, x="Distancia_NEW", y="Price")
plot.show()
#mostrar_graf_variables_continuas(dataframe,"Location_TRA")
sb.scatterplot(data=dataframe, x="Location_TRA", y="Price")
mostrar_graf_variables_continuas(dataframe,"Longtitude")
plot.show()

dataframe_min=dataframe[dataframe["Lattitude"]>=dataframe["Lattitude"].mean()]
#dataframe["Lattitude_TRA"]=np.log(dataframe["Lattitude"])
#dataframe["Price_TRA"]=np.log(dataframe["Price"])
#mostrar_graf_variables_continuas(dataframe,"Location_TRA")
sb.scatterplot(data=dataframe, x="Lattitude", y="Price_TRA")
mostrar_graf_variables_continuas(dataframe,"Lattitude_TRA")
plot.show()

sb.scatterplot(data=dataframe, x="Lattitude_TRA", y="Price_TRA")
#mostrar_graf_variables_continuas(dataframe_filtered,"Distance_SQR")
plot.show()

data_filtered.corr()

#sb.swarmplot(data=dataframe, x="Lattitude", y="Longtitude",hue="Price",s = 4)
#mostrar_graf_variables_continuas(dataframe_filtered,"Distance_SQR")
#plot.show()x_estimator=np.mean

#sb.lmplot(x="Location_TRA", y="Price", data=dataframe, x_estimator=np.mean);
#plot.show()
_images/4-TransformacionVariablesCuantitativas_73_0.png _images/4-TransformacionVariablesCuantitativas_73_1.png _images/4-TransformacionVariablesCuantitativas_73_2.png _images/4-TransformacionVariablesCuantitativas_73_3.png
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-37-5596a4c4f5ea> in <module>
     25 #mostrar_graf_variables_continuas(dataframe,"Location_TRA")
     26 sb.scatterplot(data=dataframe, x="Lattitude", y="Price_TRA")
---> 27 mostrar_graf_variables_continuas(dataframe,"Lattitude_TRA")
     28 plot.show()
     29 

<ipython-input-1-5d2674297076> in mostrar_graf_variables_continuas(df_data, column)
     30     sb.set_theme(style="whitegrid")
     31     fig, (ax1,ax2) = plot.subplots(1,2,figsize=(12,6))
---> 32     sb.histplot(data=df_data,x=column,ax=ax1)
     33     sb.boxplot(data=df_data,x=column,ax=ax2)
     34     sb.displot(data=df_data, x=column,kind="kde",rug=True)

~/anaconda3/lib/python3.7/site-packages/seaborn/distributions.py in histplot(data, x, y, hue, weights, stat, bins, binwidth, binrange, discrete, cumulative, common_bins, common_norm, multiple, element, fill, shrink, kde, kde_kws, line_kws, thresh, pthresh, pmax, cbar, cbar_ax, cbar_kws, palette, hue_order, hue_norm, color, log_scale, legend, ax, **kwargs)
   1390     p = _DistributionPlotter(
   1391         data=data,
-> 1392         variables=_DistributionPlotter.get_semantics(locals())
   1393     )
   1394 

~/anaconda3/lib/python3.7/site-packages/seaborn/distributions.py in __init__(self, data, variables)
    106     ):
    107 
--> 108         super().__init__(data=data, variables=variables)
    109 
    110     @property

~/anaconda3/lib/python3.7/site-packages/seaborn/_core.py in __init__(self, data, variables)
    602     def __init__(self, data=None, variables={}):
    603 
--> 604         self.assign_variables(data, variables)
    605 
    606         for var, cls in self._semantic_mappings.items():

~/anaconda3/lib/python3.7/site-packages/seaborn/_core.py in assign_variables(self, data, variables)
    666             self.input_format = "long"
    667             plot_data, variables = self._assign_variables_longform(
--> 668                 data, **variables,
    669             )
    670 

~/anaconda3/lib/python3.7/site-packages/seaborn/_core.py in _assign_variables_longform(self, data, **kwargs)
    885                     # We don't know what this name means
    886                     err = f"Could not interpret value `{val}` for parameter `{key}`"
--> 887                     raise ValueError(err)
    888 
    889             else:

ValueError: Could not interpret value `Lattitude_TRA` for parameter `x`
_images/4-TransformacionVariablesCuantitativas_73_5.png _images/4-TransformacionVariablesCuantitativas_73_6.png
dataframe.corr()
data_filtered.corr()

#Calculamos el precio medio por barrio
data_aux=data_filtered.groupby("Suburb")[["Price"]].mean().reset_index() 
#nos quedamos con el precio medio mas alta
data_aux[data_aux["Price"]==max(data_aux['Price'])]
# cogemos como centro para el calculo de distancia la latitud y longitud media del barrio mas caro
data_frameKoyong=data_filtered[data_filtered["Suburb"]=='Kooyong']
Koyong_lat_mean=data_frameKoyong["Lattitude"].mean()
Koyong_lon_mean=data_frameKoyong["Longtitude"].mean()

#Calculamos la nueva distancia 
arr=[]
for lat, lon in zip(data_filtered['Lattitude'], data_filtered['Longtitude']):
    arr.append(distance((lat,lon), (Koyong_lat_mean,Koyong_lon_mean)).km)

data_filtered["Distancia_NEW"]=arr
#Comprobamos si la correlaciñon mejora y verficamos que casi duplica 
data_filtered.corr()
sb.scatterplot(data=data_filtered, x="Distancia_NEW", y="Price")
#mostrar_graf_variables_continuas(dataframe_filtered,"Distance_SQR")
plot.show()

sb.regplot(data=data_filtered, x="Distancia_NEW", y="Price_TRA")
plot.show()
data_filtered["BathsAndRooms"]=(data_filtered["Rooms"]+data_filtered["Bathroom"])/data_filtered["Distancia_NEW"].apply(np.sqrt)



data_filtered.corr()
_images/4-TransformacionVariablesCuantitativas_74_0.png _images/4-TransformacionVariablesCuantitativas_74_1.png
Rooms Price Distance Postcode Bedroom2 Bathroom Car Landsize BuildingArea YearBuilt Lattitude Longtitude Propertycount Rooms_TR BathsAndRooms Distance_TRA Bathroom_TRA Price_TRA Location_TRA Distancia_NEW
Rooms 1.000000 0.444864 0.279645 0.083777 0.958660 0.607969 0.394893 0.034289 0.138474 -0.001748 0.019165 0.088233 -0.059967 0.990974 0.479431 0.311571 0.603991 0.497329 -0.053357 0.210708
Price 0.444864 1.000000 -0.236546 0.035027 0.430309 0.430088 0.201903 0.032708 0.100730 -0.333178 -0.216226 0.198143 -0.051703 0.440860 0.699490 -0.227363 0.412569 0.925786 0.158799 -0.406191
Distance 0.279645 -0.236546 1.000000 0.501969 0.282475 0.140581 0.244110 0.055342 0.076774 0.314368 -0.091838 0.190959 0.001638 0.294019 -0.270551 0.977812 0.154144 -0.244418 0.025051 0.779432
Postcode 0.083777 0.035027 0.501969 1.000000 0.087322 0.123859 0.062791 0.037825 0.041688 0.097135 -0.218590 0.366099 0.032716 0.081738 0.063468 0.428775 0.129241 0.014529 0.097123 0.187194
Bedroom2 0.958660 0.430309 0.282475 0.087322 1.000000 0.605297 0.396520 0.034204 0.136910 0.007786 0.019133 0.090682 -0.060038 0.950846 0.459856 0.313371 0.600492 0.480904 -0.054229 0.212919
Bathroom 0.607969 0.430088 0.140581 0.123859 0.605297 1.000000 0.305624 0.037681 0.129212 0.185164 -0.047392 0.103547 -0.040403 0.586250 0.567351 0.149824 0.987819 0.418454 0.012278 0.053004
Car 0.394893 0.201903 0.244110 0.062791 0.396520 0.305624 1.000000 0.031326 0.094187 0.124873 0.002003 0.039071 -0.013930 0.397318 0.160422 0.275476 0.309361 0.218195 -0.016927 0.187193
Landsize 0.034289 0.032708 0.055342 0.037825 0.034204 0.037681 0.031326 1.000000 0.375364 0.041208 0.023718 -0.003638 -0.017014 0.033722 0.008487 0.040693 0.037522 0.031401 -0.024097 0.051483
BuildingArea 0.138474 0.100730 0.076774 0.041688 0.136910 0.129212 0.094187 0.375364 1.000000 0.072938 0.025880 -0.010702 -0.026511 0.134421 0.080704 0.068526 0.127394 0.104879 -0.023983 0.059722
YearBuilt -0.001748 -0.333178 0.314368 0.097135 0.007786 0.185164 0.124873 0.041208 0.072938 1.000000 0.095394 -0.021568 0.023614 -0.009130 -0.154929 0.330999 0.195752 -0.372839 -0.094755 0.310427
Lattitude 0.019165 -0.216226 -0.091838 -0.218590 0.019133 -0.047392 0.002003 0.023718 0.025880 0.095394 1.000000 -0.348049 0.021744 0.024616 -0.192564 -0.066990 -0.043646 -0.239438 -0.938974 0.257569
Longtitude 0.088233 0.198143 0.190959 0.366099 0.090682 0.103547 0.039071 -0.003638 -0.010702 -0.021568 -0.348049 1.000000 0.029066 0.082724 0.237485 0.191555 0.100580 0.252568 0.004350 -0.341920
Propertycount -0.059967 -0.051703 0.001638 0.032716 -0.060038 -0.040403 -0.013930 -0.017014 -0.026511 0.023614 0.021744 0.029066 1.000000 -0.063429 -0.001060 -0.017850 -0.041152 -0.075131 -0.034315 0.010579
Rooms_TR 0.990974 0.440860 0.294019 0.081738 0.950846 0.586250 0.397318 0.033722 0.134421 -0.009130 0.024616 0.082724 -0.063429 1.000000 0.460934 0.327658 0.587198 0.509916 -0.057190 0.228666
BathsAndRooms 0.479431 0.699490 -0.270551 0.063468 0.459856 0.567351 0.160422 0.008487 0.080704 -0.154929 -0.192564 0.237485 -0.001060 0.460934 1.000000 -0.260381 0.549127 0.661976 0.119292 -0.509117
Distance_TRA 0.311571 -0.227363 0.977812 0.428775 0.313371 0.149824 0.275476 0.040693 0.068526 0.330999 -0.066990 0.191555 -0.017850 0.327658 -0.260381 1.000000 0.162773 -0.229131 -0.001396 0.744837
Bathroom_TRA 0.603991 0.412569 0.154144 0.129241 0.600492 0.987819 0.309361 0.037522 0.127394 0.195752 -0.043646 0.100580 -0.041152 0.587198 0.549127 0.162773 1.000000 0.410399 0.009325 0.069233
Price_TRA 0.497329 0.925786 -0.244418 0.014529 0.480904 0.418454 0.218195 0.031401 0.104879 -0.372839 -0.239438 0.252568 -0.075131 0.509916 0.661976 -0.229131 0.410399 1.000000 0.163688 -0.427301
Location_TRA -0.053357 0.158799 0.025051 0.097123 -0.054229 0.012278 -0.016927 -0.024097 -0.023983 -0.094755 -0.938974 0.004350 -0.034315 -0.057190 0.119292 -0.001396 0.009325 0.163688 1.000000 -0.151853
Distancia_NEW 0.210708 -0.406191 0.779432 0.187194 0.212919 0.053004 0.187193 0.051483 0.059722 0.310427 0.257569 -0.341920 0.010579 0.228666 -0.509117 0.744837 0.069233 -0.427301 -0.151853 1.000000
data_filtered.to_csv('\\home\\ruben\\data_filtered.csv')
print(data_filtered)
           Suburb           Address  Rooms Type      Price Method  SellerG  \
1      Abbotsford      85 Turner St      2    h  1480000.0      S   Biggin   
2      Abbotsford   25 Bloomburg St      2    h  1035000.0      S   Biggin   
4      Abbotsford      5 Charles St      3    h  1465000.0     SP   Biggin   
5      Abbotsford  40 Federation La      3    h   850000.0     PI   Biggin   
6      Abbotsford       55a Park St      4    h  1600000.0     VB   Nelson   
...           ...               ...    ...  ...        ...    ...      ...   
34851  Yarraville     78 Bayview Rd      3    h  1101000.0      S      Jas   
34852  Yarraville       13 Burns St      4    h  1480000.0     PI      Jas   
34853  Yarraville     29A Murray St      2    h   888000.0     SP  Sweeney   
34854  Yarraville    147A Severn St      2    t   705000.0      S      Jas   
34856  Yarraville  3 Tarrengower St      2    h  1020000.0     PI       RW   

             Date  Distance  Postcode  ...  Longtitude             Regionname  \
1       3/12/2016       2.5    3067.0  ...   144.99840  Northern Metropolitan   
2       4/02/2016       2.5    3067.0  ...   144.99340  Northern Metropolitan   
4       4/03/2017       2.5    3067.0  ...   144.99440  Northern Metropolitan   
5       4/03/2017       2.5    3067.0  ...   144.99690  Northern Metropolitan   
6       4/06/2016       2.5    3067.0  ...   144.99410  Northern Metropolitan   
...           ...       ...       ...  ...         ...                    ...   
34851  24/02/2018       6.3    3013.0  ...   144.88516   Western Metropolitan   
34852  24/02/2018       6.3    3013.0  ...   144.88467   Western Metropolitan   
34853  24/02/2018       6.3    3013.0  ...   144.88826   Western Metropolitan   
34854  24/02/2018       6.3    3013.0  ...   144.87856   Western Metropolitan   
34856  24/02/2018       6.3    3013.0  ...   144.89351   Western Metropolitan   

       Propertycount  Rooms_TR  BathsAndRooms  Distance_TRA Bathroom_TRA  \
1             4019.0  1.414214       1.248946      1.581139     1.000000   
2             4019.0  1.414214       1.300484      1.581139     1.000000   
4             4019.0  1.732051       2.203660      1.581139     1.414214   
5             4019.0  1.732051       2.025679      1.581139     1.414214   
6             4019.0  2.000000       2.164375      1.581139     1.000000   
...              ...       ...            ...           ...          ...   
34851         6543.0  1.732051       1.082942      2.509980     1.000000   
34852         6543.0  2.000000       1.351015      2.509980     1.000000   
34853         6543.0  1.414214       1.098701      2.509980     1.414214   
34854         6543.0  1.414214       0.803688      2.509980     1.000000   
34856         6543.0  1.414214       0.840507      2.509980     1.000000   

       Price_TRA  Location_TRA Distancia_NEW  
1      20.497166     -3.835977      5.769724  
2      19.981199     -3.835003      5.321484  
4      20.482469     -3.834887      5.148145  
5      19.697103     -3.836211      6.092547  
6      20.609640     -3.835092      5.336729  
...          ...           ...           ...  
34851  20.070383     -3.831831     13.642988  
34852  20.497166     -3.831860     13.696814  
34853  19.760200     -3.831451     13.254418  
34854  19.427264     -3.830450     13.933747  
34856  19.960138     -3.831327     12.739729  

[20778 rows x 28 columns]